﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MAF.Common;

namespace MAF
{
    /// <summary>
    /// 持久化接口
    /// </summary>
    public interface IWorkspace
    {
        /// <summary>
        /// 新增
        /// 实现说明：增加到存储库中
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="o"></param>
        void Save(object o);

        /// <summary>
        /// 删除
        /// 实现说明：从存储库中删除，应该只删除已经在存储库中的对象，防止与新增修改方法冲突
        /// </summary>
        /// <param name="o"></param>
        void Delete(object id);

        /// <summary>
        /// 查找对象
        /// 实现说明：查找对象，并关联到修改列表
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="idValue"></param>
        /// <returns></returns>
        T GetById<T>(object id);

        /// <summary>
        /// 持久化所有更改
        /// </summary>
        void PersistAll();/// 实现说明：实现持久化事务

        /// <summary>
        /// 放弃所有更改
        /// </summary>
        void Clean();

        /// <summary>
        /// 查找列表
        /// 实现说明：不用关联修改，注意考虑缓存列表问题
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="query"></param>
        /// <returns></returns>
        IList<T> GetByQuery<T>(IQuery query);
    }
}
